package org.example.dataStorage.Json;

import com.alibaba.fastjson2.JSON;

import java.io.*;
import java.nio.file.Path;
import java.util.Properties;

public class JsonStorageService {

    private final JsonStorageConfig config;


    public JsonStorageService(JsonStorageConfig config) {
        this.config = config;
        // 确保存储目录存在
        ensureStorageDirectory();
    }

    private final Properties prop = new Properties();

    //读取
    public String getJSON() {
        try (FileInputStream input = new FileInputStream(
                Path.of(config.getStoragePath(),config.getFILE_NAME()).toAbsolutePath().toString()
        )) {
            // 加载属性文件（自动处理UTF-8编码）
            prop.load(input);
        }catch (IOException ex) {
            System.err.println("读取配置失败: " + ex.getMessage());
        }
        return prop.getProperty(config.getJSON_KEY());
    }

    public void setJSON(Object value)  {
        // 格式化为json
        String jsonStr = JSON.toJSONString(value);
        //保存到文件
        prop.setProperty(config.getJSON_KEY(), jsonStr);
        //写入数据
        try (OutputStream output = new FileOutputStream(
                Path.of(config.getStoragePath(),config.getFILE_NAME()).toAbsolutePath().toString()
        )) {
            prop.store(output, "Application Configuration");
            System.out.println("配置已成功保存");
        } catch (IOException ex) {
            System.err.println("保存配置失败: " + ex.getMessage());
        }
    }

    /**
     * 确保存储目录存在
     * 如果不存在就创建空配置文件
     * 注意：仅创建文件，不初始化内容
     */
    private void ensureStorageDirectory() {
        File dir = new File(config.getStoragePath());
        if (!dir.exists()) {
            // 使用NIO方式创建空文件
            boolean success = dir.mkdirs();
            if (!success) {
                throw new RuntimeException("无法创建存储目录: " + config.getStoragePath());
            }
        }
    }

}